# Лекция: Jackson и работа с XML в Java

Jackson также поддерживает работу с форматом XML. Для этого используется дополнительный модуль Jackson XML.

## Добавление Jackson XML в проект

Чтобы использовать Jackson XML, нужно добавить его в зависимости проекта.

```xml
<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.12.3</version>
    </dependency>
</dependencies>
```

## Преобразование объектов в XML

Jackson XML предоставляет класс `XmlMapper` для преобразования объектов в XML.

```java
XmlMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(object);
```

## Преобразование XML в объекты

`XmlMapper` также позволяет преобразовывать XML в объекты.

```java
XmlMapper xmlMapper = new XmlMapper();
MyClass object = xmlMapper.readValue(xml, MyClass.class);
```

---

# Практические задания

1. **Создайте класс `Product` с полями `id`, `name` и `price`. Преобразуйте объект `Product` в XML.** (Сложность: 1/5)
```java
public class Product {
    private int id;
    private String name;
    private double price;
    // геттеры и сеттеры
}

Product product = new Product();
product.setId(1);
product.setName("Apple");
product.setPrice(0.99);

XmlMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(product);
System.out.println(xml); // выводит <Product><id>1</id><name>Apple</name><price>0.99</price></Product>
```

2. **Преобразуйте XML в объект `Product`.** (Сложность: 1/5)
```java
String xml = "<Product><id>1</id><name>Apple</name><price>0.99</price></Product>";

XmlMapper xmlMapper = new XmlMapper();
Product product = xmlMapper.readValue(xml, Product.class);
System.out.println(product.getName()); // выводит "Apple"
```

3. **Создайте класс `Order` с полями `id`, `userId` и `products` (список `Product`). Преобразуйте объект `Order` в XML.** (Сложность: 2/5)
```java
public class Order {
    private int id;
    private int userId;
    private List<Product> products;
    // геттеры и сеттеры
}

Order order = new Order();
order.setId(1);
order.setUserId(1);
order.setProducts(Arrays.asList(product));

XmlMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(order);
System.out.println(xml); // выводит XML с тегом <products> для списка продуктов
```

4. **Преобразуйте XML в объект `Order`.** (Сложность: 2/5)
```java
String xml = "<Order><id>1</id><userId>1</userId><products><Product><id>1</id><name>Apple</name><price>0.99</price></Product></products></Order>";

XmlMapper xmlMapper = new XmlMapper();
Order order = xmlMapper.readValue(xml, Order.class);
System.out.println(order.getProducts().get(0).getName()); // выводит "Apple"
```

5. **Создайте класс `User` с полями `id`, `name`, `email` и `orders` (список `Order`). Преобразуйте объект `User` в XML и обратно.** (Сложность: 3/5)
```java
public class User {
    private int id;
    private String name;
    private String email;
    private List<Order> orders;
    // геттеры и сеттеры
}

User user = new User();
user.setId(1);
user.setName("John Doe");
user.setEmail("john.doe@example.com");
user.setOrders(Arrays.asList(order));

XmlMapper xmlMapper = new XmlMapper();
String xml = xmlMapper.writeValueAsString(user);
System.out.println(xml); // выводит XML

User parsedUser = xmlMapper.readValue(xml, User.class);
System.out.println(parsedUser.getName()); // выводит "John Doe"
```